package com.github.chirspan.xaas.mybatis.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.chirspan.xaas.mybatis.model.BaseModel;

import java.util.List;

/**
 * ************************
 * <p>通用service</p>
 * *************************
 *
 * @author chenpan
 * @date 2021/1/19 09:53
 */
public interface IBaseService<T extends BaseModel> {

    /**
     * 分页查询
     *
     * @param page
     * @param wrapper
     * @return
     */
    IPage pageList(Page<T> page, QueryWrapper wrapper);

    /**
     * 获取全部数据
     *
     * @return
     */
    List<T> selectAll();

    /**
     * 获取总数量
     *
     * @return
     */
    int count(T t);

    /**
     * 获取满足条件的数量
     *
     * @param wrapper
     * @return
     */
    int count(QueryWrapper wrapper);

    /**
     * 根据主键Id获取数据
     *
     * @param id
     * @return
     */
    T selectById(String id);

    /**
     * 保存对象
     *
     * @param entity
     * @return
     */
    boolean add(T entity);

    /**
     * 根据主键id删除
     *
     * @param id
     * @return
     */
    boolean delete(String id);

    /**
     * 根据主键批量删除
     *
     * @param list
     * @return
     */
    boolean batchDelete(List<String> list);

    /**
     * 根据主键更新所有字段
     *
     * @param entity
     * @return
     */
    boolean updateAll(T entity);

    /**
     * 根据主键更新所有不为空字段
     *
     * @param entity
     * @return
     */
    boolean updateNotNull(T entity);

    /**
     * 条件查询
     *
     * @param wrapper
     * @return
     */
    List<T> selectByWrapper(QueryWrapper wrapper);

    /**
     * 根据ID串批量查询
     *
     * @param ids
     * @return
     */
    List<T> selectByIds(List<String> ids);

    void recursiveDelete(String id);
}
